/**
 * vue-compiler-sfc主要是用来解析SFC组件
 *  一个sfc（.vue文件）包含的三要素：template，script，style
 *  vue-compiler-sfc 就是用来负责解析这三大要素的
 */
// API
export { parse } from "./parse";
export { compileTemplate } from "./compileTemplate";
export { compileStyle, compileStyleAsync } from "./compileStyle";
export { compileScript } from "./compileScript";
export { rewriteDefault } from "./rewriteDefault";
export {
  shouldTransform as shouldTransformRef,
  transform as transformRef,
  transformAST as transformRefAST,
} from "@vue/ref-transform";

// Utilities
export { parse as babelParse } from "@babel/parser";
import MagicString from "magic-string";
export { MagicString };
// technically internal but we want it in @vue/repl, cast it as any to avoid
// relying on estree types
import { walk as _walk } from "estree-walker";
export const walk = _walk as any;
export {
  generateCodeFrame,
  walkIdentifiers,
  extractIdentifiers,
  isInDestructureAssignment,
  isStaticProperty,
} from "@vue/compiler-core";

// Types
export {
  SFCParseOptions,
  SFCDescriptor,
  SFCBlock,
  SFCTemplateBlock,
  SFCScriptBlock,
  SFCStyleBlock,
} from "./parse";
export {
  TemplateCompiler,
  SFCTemplateCompileOptions,
  SFCTemplateCompileResults,
} from "./compileTemplate";
export {
  SFCStyleCompileOptions,
  SFCAsyncStyleCompileOptions,
  SFCStyleCompileResults,
} from "./compileStyle";
export { SFCScriptCompileOptions } from "./compileScript";
export {
  CompilerOptions,
  CompilerError,
  BindingMetadata,
} from "@vue/compiler-core";
